
(function ($, window, document) {



    var Carousel = {

        init : function (options, el) {

            var base = this;



            base.$elem = $(el);

            base.options = $.extend({}, $.fn.owlCarousel.options, base.$elem.data(), options);



            base.userOptions = options;

            base.loadContent();

        },



        loadContent : function () {

            var base = this, url;



            function getData(data) {

                var i, content = "";

                if (typeof base.options.jsonSuccess === "function") {

                    base.options.jsonSuccess.apply(this, [data]);

                } else {

                    for (i in data.owl) {

                        if (data.owl.hasOwnProperty(i)) {

                            content += data.owl[i].item;

                        }

                    }

                    base.$elem.html(content);

                }

                base.logIn();

            }



            if (typeof base.options.beforeInit === "function") {

                base.options.beforeInit.apply(this, [base.$elem]);

            }



            if (typeof base.options.jsonPath === "string") {

                url = base.options.jsonPath;

                $.getJSON(url, getData);

            } else {

                base.logIn();

            }

        },



        logIn : function () {

            var base = this;



            base.$elem.data("owl-originalStyles", base.$elem.attr("style"));

            base.$elem.data("owl-originalClasses", base.$elem.attr("class"));



            base.$elem.css({opacity: 0});

            base.orignalItems = base.options.items;

            base.checkBrowser();

            base.wrapperWidth = 0;

            base.checkVisible = null;

            base.setVars();

        },



        setVars : function () {

            var base = this;

            if (base.$elem.children().length === 0) {return false; }

            base.baseClass();

            base.eventTypes();

            base.$userItems = base.$elem.children();

            base.itemsAmount = base.$userItems.length;

            base.wrapItems();

            base.$owlItems = base.$elem.find(".owl-item");

            base.$owlWrapper = base.$elem.find(".owl-wrapper");

            base.playDirection = "next";

            base.prevItem = 0;

            base.prevArr = [0];

            base.currentItem = 0;

            base.customEvents();

            base.onStartup();

        },



        onStartup : function () {

            var base = this;

            base.updateItems();

            base.calculateAll();

            base.buildControls();

            base.updateControls();

            base.response();

            base.moveEvents();

            base.stopOnHover();

            base.owlStatus();



            if (base.options.transitionStyle !== false) {

                base.transitionTypes(base.options.transitionStyle);

            }

            if (base.options.autoPlay === true) {

                base.options.autoPlay = 5000;

            }

            base.play();



            base.$elem.find(".owl-wrapper").css("display", "block");



            if (!base.$elem.is(":visible")) {

                base.watchVisibility();

            } else {

                base.$elem.css("opacity", 1);

            }

            base.onstartup = false;

            base.eachMoveUpdate();

            if (typeof base.options.afterInit === "function") {

                base.options.afterInit.apply(this, [base.$elem]);

            }

        },



        eachMoveUpdate : function () {

            var base = this;



            if (base.options.lazyLoad === true) {

                base.lazyLoad();

            }

            if (base.options.autoHeight === true) {

                base.autoHeight();

            }

            base.onVisibleItems();



            if (typeof base.options.afterAction === "function") {

                base.options.afterAction.apply(this, [base.$elem]);

            }

        },



        updateVars : function () {

            var base = this;

            if (typeof base.options.beforeUpdate === "function") {

                base.options.beforeUpdate.apply(this, [base.$elem]);

            }

            base.watchVisibility();

            base.updateItems();

            base.calculateAll();

            base.updatePosition();

            base.updateControls();

            base.eachMoveUpdate();

            if (typeof base.options.afterUpdate === "function") {

                base.options.afterUpdate.apply(this, [base.$elem]);

            }

        },



        reload : function () {

            var base = this;

            window.setTimeout(function () {

                base.updateVars();

            }, 0);

        },



        watchVisibility : function () {

            var base = this;



            if (base.$elem.is(":visible") === false) {

                base.$elem.css({opacity: 0});

                window.clearInterval(base.autoPlayInterval);

                window.clearInterval(base.checkVisible);

            } else {

                return false;

            }

            base.checkVisible = window.setInterval(function () {

                if (base.$elem.is(":visible")) {

                    base.reload();

                    base.$elem.animate({opacity: 1}, 200);

                    window.clearInterval(base.checkVisible);

                }

            }, 500);

        },



        wrapItems : function () {

            var base = this;

            base.$userItems.wrapAll("<div class=\"owl-wrapper\">").wrap("<div class=\"owl-item\"></div>");

            base.$elem.find(".owl-wrapper").wrap("<div class=\"owl-wrapper-outer\">");

            base.wrapperOuter = base.$elem.find(".owl-wrapper-outer");

            base.$elem.css("display", "block");

        },



        baseClass : function () {

            var base = this,

                hasBaseClass = base.$elem.hasClass(base.options.baseClass),

                hasThemeClass = base.$elem.hasClass(base.options.theme);



            if (!hasBaseClass) {

                base.$elem.addClass(base.options.baseClass);

            }



            if (!hasThemeClass) {

                base.$elem.addClass(base.options.theme);

            }

        },



        updateItems : function () {

            var base = this, width, i;



            if (base.options.responsive === false) {

                return false;

            }

            if (base.options.singleItem === true) {

                base.options.items = base.orignalItems = 1;

                base.options.itemsCustom = false;

                base.options.itemsDesktop = false;

                base.options.itemsDesktopSmall = false;

                base.options.itemsTablet = false;

                base.options.itemsTabletSmall = false;

                base.options.itemsMobile = false;

                return false;

            }



            width = $(base.options.responsiveBaseWidth).width();



            if (width > (base.options.itemsDesktop[0] || base.orignalItems)) {

                base.options.items = base.orignalItems;

            }

            if (base.options.itemsCustom !== false) {

                //Reorder array by screen size

                base.options.itemsCustom.sort(function (a, b) {return a[0] - b[0]; });



                for (i = 0; i < base.options.itemsCustom.length; i += 1) {

                    if (base.options.itemsCustom[i][0] <= width) {

                        base.options.items = base.options.itemsCustom[i][1];

                    }

                }



            } else {



                if (width <= base.options.itemsDesktop[0] && base.options.itemsDesktop !== false) {

                    base.options.items = base.options.itemsDesktop[1];

                }



                if (width <= base.options.itemsDesktopSmall[0] && base.options.itemsDesktopSmall !== false) {

                    base.options.items = base.options.itemsDesktopSmall[1];

                }



                if (width <= base.options.itemsTablet[0] && base.options.itemsTablet !== false) {

                    base.options.items = base.options.itemsTablet[1];

                }



                if (width <= base.options.itemsTabletSmall[0] && base.options.itemsTabletSmall !== false) {

                    base.options.items = base.options.itemsTabletSmall[1];

                }



                if (width <= base.options.itemsMobile[0] && base.options.itemsMobile !== false) {

                    base.options.items = base.options.itemsMobile[1];

                }

            }



            //if number of items is less than declared

            if (base.options.items > base.itemsAmount && base.options.itemsScaleUp === true) {

                base.options.items = base.itemsAmount;

            }

        },



        response : function () {

            var base = this,

                smallDelay,

                lastWindowWidth;



            if (base.options.responsive !== true) {

                return false;

            }

            lastWindowWidth = $(window).width();



            base.resizer = function () {

                if ($(window).width() !== lastWindowWidth) {

                    if (base.options.autoPlay !== false) {

                        window.clearInterval(base.autoPlayInterval);

                    }

                    window.clearTimeout(smallDelay);

                    smallDelay = window.setTimeout(function () {

                        lastWindowWidth = $(window).width();

                        base.updateVars();

                    }, base.options.responsiveRefreshRate);

                }

            };

            $(window).resize(base.resizer);

        },



        updatePosition : function () {

            var base = this;

            base.jumpTo(base.currentItem);

            if (base.options.autoPlay !== false) {

                base.checkAp();

            }

        },



        appendItemsSizes : function () {

            var base = this,

                roundPages = 0,

                lastItem = base.itemsAmount - base.options.items;



            base.$owlItems.each(function (index) {

                var $this = $(this);

                $this

                    .css({"width": base.itemWidth})

                    .data("owl-item", Number(index));



                if (index % base.options.items === 0 || index === lastItem) {

                    if (!(index > lastItem)) {

                        roundPages += 1;

                    }

                }

                $this.data("owl-roundPages", roundPages);

            });

        },



        appendWrapperSizes : function () {

            var base = this,

                width = base.$owlItems.length * base.itemWidth;



            base.$owlWrapper.css({

                "width": width * 2,

                "left": 0

            });

            base.appendItemsSizes();

        },



        calculateAll : function () {

            var base = this;

            base.calculateWidth();

            base.appendWrapperSizes();

            base.loops();

            base.max();

        },



        calculateWidth : function () {

            var base = this;

            base.itemWidth = Math.round(base.$elem.width() / base.options.items);

        },



        max : function () {

            var base = this,

                maximum = ((base.itemsAmount * base.itemWidth) - base.options.items * base.itemWidth) * -1;

            if (base.options.items > base.itemsAmount) {

                base.maximumItem = 0;

                maximum = 0;

                base.maximumPixels = 0;

            } else {

                base.maximumItem = base.itemsAmount - base.options.items;

                base.maximumPixels = maximum;

            }

            return maximum;

        },



        min : function () {

            return 0;

        },



        loops : function () {

            var base = this,

                prev = 0,

                elWidth = 0,

                i,

                item,

                roundPageNum;



            base.positionsInArray = [0];

            base.pagesInArray = [];



            for (i = 0; i < base.itemsAmount; i += 1) {

                elWidth += base.itemWidth;

                base.positionsInArray.push(-elWidth);



                if (base.options.scrollPerPage === true) {

                    item = $(base.$owlItems[i]);

                    roundPageNum = item.data("owl-roundPages");

                    if (roundPageNum !== prev) {

                        base.pagesInArray[prev] = base.positionsInArray[i];

                        prev = roundPageNum;

                    }

                }

            }

        },



        buildControls : function () {

            var base = this;

            if (base.options.navigation === true || base.options.pagination === true) {

                base.owlControls = $("<div class=\"owl-controls\"/>").toggleClass("clickable", !base.browser.isTouch).appendTo(base.$elem);

            }

            if (base.options.pagination === true) {

                base.buildPagination();

            }

            if (base.options.navigation === true) {

                base.buildButtons();

            }

        },



        buildButtons : function () {

            var base = this,

                buttonsWrapper = $("<div class=\"owl-buttons\"/>");

            base.owlControls.append(buttonsWrapper);



            base.buttonPrev = $("<div/>", {

                "class" : "owl-prev",

                "html" : base.options.navigationText[0] || ""

            });



            base.buttonNext = $("<div/>", {

                "class" : "owl-next",

                "html" : base.options.navigationText[1] || ""

            });



            buttonsWrapper

                .append(base.buttonPrev)

                .append(base.buttonNext);



            buttonsWrapper.on("touchstart.owlControls mousedown.owlControls", "div[class^=\"owl\"]", function (event) {

                event.preventDefault();

            });



            buttonsWrapper.on("touchend.owlControls mouseup.owlControls", "div[class^=\"owl\"]", function (event) {

                event.preventDefault();

                if ($(this).hasClass("owl-next")) {

                    base.next();

                } else {

                    base.prev();

                }

            });

        },



        buildPagination : function () {

            var base = this;



            base.paginationWrapper = $("<div class=\"owl-pagination\"/>");

            base.owlControls.append(base.paginationWrapper);



            base.paginationWrapper.on("touchend.owlControls mouseup.owlControls", ".owl-page", function (event) {

                event.preventDefault();

                if (Number($(this).data("owl-page")) !== base.currentItem) {

                    base.goTo(Number($(this).data("owl-page")), true);

                }

            });

        },



        updatePagination : function () {

            var base = this,

                counter,

                lastPage,

                lastItem,

                i,

                paginationButton,

                paginationButtonInner;



            if (base.options.pagination === false) {

                return false;

            }



            base.paginationWrapper.html("");



            counter = 0;

            lastPage = base.itemsAmount - base.itemsAmount % base.options.items;



            for (i = 0; i < base.itemsAmount; i += 1) {

                if (i % base.options.items === 0) {

                    counter += 1;

                    if (lastPage === i) {

                        lastItem = base.itemsAmount - base.options.items;

                    }

                    paginationButton = $("<div/>", {

                        "class" : "owl-page"

                    });

                    paginationButtonInner = $("<span></span>", {

                        "text": base.options.paginationNumbers === true ? counter : "",

                        "class": base.options.paginationNumbers === true ? "owl-numbers" : ""

                    });

                    paginationButton.append(paginationButtonInner);



                    paginationButton.data("owl-page", lastPage === i ? lastItem : i);

                    paginationButton.data("owl-roundPages", counter);



                    base.paginationWrapper.append(paginationButton);

                }

            }

            base.checkPagination();

        },

        checkPagination : function () {

            var base = this;

            if (base.options.pagination === false) {

                return false;

            }

            base.paginationWrapper.find(".owl-page").each(function () {

                if ($(this).data("owl-roundPages") === $(base.$owlItems[base.currentItem]).data("owl-roundPages")) {

                    base.paginationWrapper

                        .find(".owl-page")

                        .removeClass("active");

                    $(this).addClass("active");

                }

            });

        },



        checkNavigation : function () {

            var base = this;



            if (base.options.navigation === false) {

                return false;

            }

            if (base.options.rewindNav === false) {

                if (base.currentItem === 0 && base.maximumItem === 0) {

                    base.buttonPrev.addClass("disabled");

                    base.buttonNext.addClass("disabled");

                } else if (base.currentItem === 0 && base.maximumItem !== 0) {

                    base.buttonPrev.addClass("disabled");

                    base.buttonNext.removeClass("disabled");

                } else if (base.currentItem === base.maximumItem) {

                    base.buttonPrev.removeClass("disabled");

                    base.buttonNext.addClass("disabled");

                } else if (base.currentItem !== 0 && base.currentItem !== base.maximumItem) {

                    base.buttonPrev.removeClass("disabled");

                    base.buttonNext.removeClass("disabled");

                }

            }

        },



        updateControls : function () {

            var base = this;

            base.updatePagination();

            base.checkNavigation();

            if (base.owlControls) {

                if (base.options.items >= base.itemsAmount) {

                    base.owlControls.hide();

                } else {

                    base.owlControls.show();

                }

            }

        },



        destroyControls : function () {

            var base = this;

            if (base.owlControls) {

                base.owlControls.remove();

            }

        },



        next : function (speed) {

            var base = this;



            if (base.isTransition) {

                return false;

            }



            base.currentItem += base.options.scrollPerPage === true ? base.options.items : 1;

            if (base.currentItem > base.maximumItem + (base.options.scrollPerPage === true ? (base.options.items - 1) : 0)) {

                if (base.options.rewindNav === true) {

                    base.currentItem = 0;

                    speed = "rewind";

                } else {

                    base.currentItem = base.maximumItem;

                    return false;

                }

            }

            base.goTo(base.currentItem, speed);

        },



        prev : function (speed) {

            var base = this;



            if (base.isTransition) {

                return false;

            }



            if (base.options.scrollPerPage === true && base.currentItem > 0 && base.currentItem < base.options.items) {

                base.currentItem = 0;

            } else {

                base.currentItem -= base.options.scrollPerPage === true ? base.options.items : 1;

            }

            if (base.currentItem < 0) {

                if (base.options.rewindNav === true) {

                    base.currentItem = base.maximumItem;

                    speed = "rewind";

                } else {

                    base.currentItem = 0;

                    return false;

                }

            }

            base.goTo(base.currentItem, speed);

        },



        goTo : function (position, speed, drag) {

            var base = this,

                goToPixel;



            if (base.isTransition) {

                return false;

            }

            if (typeof base.options.beforeMove === "function") {

                base.options.beforeMove.apply(this, [base.$elem]);

            }

            if (position >= base.maximumItem) {

                position = base.maximumItem;

            } else if (position <= 0) {

                position = 0;

            }



            base.currentItem = base.owl.currentItem = position;

            if (base.options.transitionStyle !== false && drag !== "drag" && base.options.items === 1 && base.browser.support3d === true) {

                base.swapSpeed(0);

                if (base.browser.support3d === true) {

                    base.transition3d(base.positionsInArray[position]);

                } else {

                    base.css2slide(base.positionsInArray[position], 1);

                }

                base.afterGo();

                base.singleItemTransition();

                return false;

            }

            goToPixel = base.positionsInArray[position];



            if (base.browser.support3d === true) {

                base.isCss3Finish = false;



                if (speed === true) {

                    base.swapSpeed("paginationSpeed");

                    window.setTimeout(function () {

                        base.isCss3Finish = true;

                    }, base.options.paginationSpeed);



                } else if (speed === "rewind") {

                    base.swapSpeed(base.options.rewindSpeed);

                    window.setTimeout(function () {

                        base.isCss3Finish = true;

                    }, base.options.rewindSpeed);



                } else {

                    base.swapSpeed("slideSpeed");

                    window.setTimeout(function () {

                        base.isCss3Finish = true;

                    }, base.options.slideSpeed);

                }

                base.transition3d(goToPixel);

            } else {

                if (speed === true) {

                    base.css2slide(goToPixel, base.options.paginationSpeed);

                } else if (speed === "rewind") {

                    base.css2slide(goToPixel, base.options.rewindSpeed);

                } else {

                    base.css2slide(goToPixel, base.options.slideSpeed);

                }

            }

            base.afterGo();

        },



        jumpTo : function (position) {

            var base = this;

            if (typeof base.options.beforeMove === "function") {

                base.options.beforeMove.apply(this, [base.$elem]);

            }

            if (position >= base.maximumItem || position === -1) {

                position = base.maximumItem;

            } else if (position <= 0) {

                position = 0;

            }

            base.swapSpeed(0);

            if (base.browser.support3d === true) {

                base.transition3d(base.positionsInArray[position]);

            } else {

                base.css2slide(base.positionsInArray[position], 1);

            }

            base.currentItem = base.owl.currentItem = position;

            base.afterGo();

        },



        afterGo : function () {

            var base = this;



            base.prevArr.push(base.currentItem);

            base.prevItem = base.owl.prevItem = base.prevArr[base.prevArr.length - 2];

            base.prevArr.shift(0);



            if (base.prevItem !== base.currentItem) {

                base.checkPagination();

                base.checkNavigation();

                base.eachMoveUpdate();



                if (base.options.autoPlay !== false) {

                    base.checkAp();

                }

            }

            if (typeof base.options.afterMove === "function" && base.prevItem !== base.currentItem) {

                base.options.afterMove.apply(this, [base.$elem]);

            }

        },



        stop : function () {

            var base = this;

            base.apStatus = "stop";

            window.clearInterval(base.autoPlayInterval);

        },



        checkAp : function () {

            var base = this;

            if (base.apStatus !== "stop") {

                base.play();

            }

        },



        play : function () {

            var base = this;

            base.apStatus = "play";

            if (base.options.autoPlay === false) {

                return false;

            }

            window.clearInterval(base.autoPlayInterval);

            base.autoPlayInterval = window.setInterval(function () {

                base.next(true);

            }, base.options.autoPlay);

        },



        swapSpeed : function (action) {

            var base = this;

            if (action === "slideSpeed") {

                base.$owlWrapper.css(base.addCssSpeed(base.options.slideSpeed));

            } else if (action === "paginationSpeed") {

                base.$owlWrapper.css(base.addCssSpeed(base.options.paginationSpeed));

            } else if (typeof action !== "string") {

                base.$owlWrapper.css(base.addCssSpeed(action));

            }

        },



        addCssSpeed : function (speed) {

            return {

                "-webkit-transition": "all " + speed + "ms ease",

                "-moz-transition": "all " + speed + "ms ease",

                "-o-transition": "all " + speed + "ms ease",

                "transition": "all " + speed + "ms ease"

            };

        },



        removeTransition : function () {

            return {

                "-webkit-transition": "",

                "-moz-transition": "",

                "-o-transition": "",

                "transition": ""

            };

        },



        doTranslate : function (pixels) {

            return {

                "-webkit-transform": "translate3d(" + pixels + "px, 0px, 0px)",

                "-moz-transform": "translate3d(" + pixels + "px, 0px, 0px)",

                "-o-transform": "translate3d(" + pixels + "px, 0px, 0px)",

                "-ms-transform": "translate3d(" + pixels + "px, 0px, 0px)",

                "transform": "translate3d(" + pixels + "px, 0px,0px)"

            };

        },



        transition3d : function (value) {

            var base = this;

            base.$owlWrapper.css(base.doTranslate(value));

        },



        css2move : function (value) {

            var base = this;

            base.$owlWrapper.css({"left" : value});

        },



        css2slide : function (value, speed) {

            var base = this;



            base.isCssFinish = false;

            base.$owlWrapper.stop(true, true).animate({

                "left" : value

            }, {

                duration : speed || base.options.slideSpeed,

                complete : function () {

                    base.isCssFinish = true;

                }

            });

        },



        checkBrowser : function () {

            var base = this,

                translate3D = "translate3d(0px, 0px, 0px)",

                tempElem = document.createElement("div"),

                regex,

                asSupport,

                support3d,

                isTouch;



            tempElem.style.cssText = "  -moz-transform:" + translate3D +

                                  "; -ms-transform:"     + translate3D +

                                  "; -o-transform:"      + translate3D +

                                  "; -webkit-transform:" + translate3D +

                                  "; transform:"         + translate3D;

            regex = /translate3d\(0px, 0px, 0px\)/g;

            asSupport = tempElem.style.cssText.match(regex);

            support3d = (asSupport !== null && asSupport.length === 1);



            isTouch = "ontouchstart" in window || window.navigator.msMaxTouchPoints;



            base.browser = {

                "support3d" : support3d,

                "isTouch" : isTouch

            };

        },



        moveEvents : function () {

            var base = this;

            if (base.options.mouseDrag !== false || base.options.touchDrag !== false) {

                base.gestures();

                base.disabledEvents();

            }

        },



        eventTypes : function () {

            var base = this,

                types = ["s", "e", "x"];



            base.ev_types = {};



            if (base.options.mouseDrag === true && base.options.touchDrag === true) {

                types = [

                    "touchstart.owl mousedown.owl",

                    "touchmove.owl mousemove.owl",

                    "touchend.owl touchcancel.owl mouseup.owl"

                ];

            } else if (base.options.mouseDrag === false && base.options.touchDrag === true) {

                types = [

                    "touchstart.owl",

                    "touchmove.owl",

                    "touchend.owl touchcancel.owl"

                ];

            } else if (base.options.mouseDrag === true && base.options.touchDrag === false) {

                types = [

                    "mousedown.owl",

                    "mousemove.owl",

                    "mouseup.owl"

                ];

            }



            base.ev_types.start = types[0];

            base.ev_types.move = types[1];

            base.ev_types.end = types[2];

        },



        disabledEvents :  function () {

            var base = this;

            base.$elem.on("dragstart.owl", function (event) { event.preventDefault(); });

            base.$elem.on("mousedown.disableTextSelect", function (e) {

                return $(e.target).is('input, textarea, select, option');

            });

        },



        gestures : function () {

            /*jslint unparam: true*/

            var base = this,

                locals = {

                    offsetX : 0,

                    offsetY : 0,

                    baseElWidth : 0,

                    relativePos : 0,

                    position: null,

                    minSwipe : null,

                    maxSwipe: null,

                    sliding : null,

                    dargging: null,

                    targetElement : null

                };



            base.isCssFinish = true;



            function getTouches(event) {

                if (event.touches !== undefined) {

                    return {

                        x : event.touches[0].pageX,

                        y : event.touches[0].pageY

                    };

                }



                if (event.touches === undefined) {

                    if (event.pageX !== undefined) {

                        return {

                            x : event.pageX,

                            y : event.pageY

                        };

                    }

                    if (event.pageX === undefined) {

                        return {

                            x : event.clientX,

                            y : event.clientY

                        };

                    }

                }

            }



            function swapEvents(type) {

                if (type === "on") {

                    $(document).on(base.ev_types.move, dragMove);

                    $(document).on(base.ev_types.end, dragEnd);

                } else if (type === "off") {

                    $(document).off(base.ev_types.move);

                    $(document).off(base.ev_types.end);

                }

            }



            function dragStart(event) {

                var ev = event.originalEvent || event || window.event,

                    position;



                if (ev.which === 3) {

                    return false;

                }

                if (base.itemsAmount <= base.options.items) {

                    return;

                }

                if (base.isCssFinish === false && !base.options.dragBeforeAnimFinish) {

                    return false;

                }

                if (base.isCss3Finish === false && !base.options.dragBeforeAnimFinish) {

                    return false;

                }



                if (base.options.autoPlay !== false) {

                    window.clearInterval(base.autoPlayInterval);

                }



                if (base.browser.isTouch !== true && !base.$owlWrapper.hasClass("grabbing")) {

                    base.$owlWrapper.addClass("grabbing");

                }



                base.newPosX = 0;

                base.newRelativeX = 0;



                $(this).css(base.removeTransition());



                position = $(this).position();

                locals.relativePos = position.left;



                locals.offsetX = getTouches(ev).x - position.left;

                locals.offsetY = getTouches(ev).y - position.top;



                swapEvents("on");



                locals.sliding = false;

                locals.targetElement = ev.target || ev.srcElement;

            }



            function dragMove(event) {

                var ev = event.originalEvent || event || window.event,

                    minSwipe,

                    maxSwipe;



                base.newPosX = getTouches(ev).x - locals.offsetX;

                base.newPosY = getTouches(ev).y - locals.offsetY;

                base.newRelativeX = base.newPosX - locals.relativePos;



                if (typeof base.options.startDragging === "function" && locals.dragging !== true && base.newRelativeX !== 0) {

                    locals.dragging = true;

                    base.options.startDragging.apply(base, [base.$elem]);

                }



                if ((base.newRelativeX > 8 || base.newRelativeX < -8) && (base.browser.isTouch === true)) {

                    if (ev.preventDefault !== undefined) {

                        ev.preventDefault();

                    } else {

                        ev.returnValue = false;

                    }

                    locals.sliding = true;

                }



                if ((base.newPosY > 10 || base.newPosY < -10) && locals.sliding === false) {

                    $(document).off("touchmove.owl");

                }



                minSwipe = function () {

                    return base.newRelativeX / 5;

                };



                maxSwipe = function () {

                    return base.maximumPixels + base.newRelativeX / 5;

                };



                base.newPosX = Math.max(Math.min(base.newPosX, minSwipe()), maxSwipe());

                if (base.browser.support3d === true) {

                    base.transition3d(base.newPosX);

                } else {

                    base.css2move(base.newPosX);

                }

            }



            function dragEnd(event) {

                var ev = event.originalEvent || event || window.event,

                    newPosition,

                    handlers,

                    owlStopEvent;



                ev.target = ev.target || ev.srcElement;



                locals.dragging = false;



                if (base.browser.isTouch !== true) {

                    base.$owlWrapper.removeClass("grabbing");

                }



                if (base.newRelativeX < 0) {

                    base.dragDirection = base.owl.dragDirection = "left";

                } else {

                    base.dragDirection = base.owl.dragDirection = "right";

                }



                if (base.newRelativeX !== 0) {

                    newPosition = base.getNewPosition();

                    base.goTo(newPosition, false, "drag");

                    if (locals.targetElement === ev.target && base.browser.isTouch !== true) {

                        $(ev.target).on("click.disable", function (ev) {

                            ev.stopImmediatePropagation();

                            ev.stopPropagation();

                            ev.preventDefault();

                            $(ev.target).off("click.disable");

                        });

                        handlers = $._data(ev.target, "events").click;

                        owlStopEvent = handlers.pop();

                        handlers.splice(0, 0, owlStopEvent);

                    }

                }

                swapEvents("off");

            }

            base.$elem.on(base.ev_types.start, ".owl-wrapper", dragStart);

        },



        getNewPosition : function () {

            var base = this,

                newPosition = base.closestItem();



            if (newPosition > base.maximumItem) {

                base.currentItem = base.maximumItem;

                newPosition  = base.maximumItem;

            } else if (base.newPosX >= 0) {

                newPosition = 0;

                base.currentItem = 0;

            }

            return newPosition;

        },

        closestItem : function () {

            var base = this,

                array = base.options.scrollPerPage === true ? base.pagesInArray : base.positionsInArray,

                goal = base.newPosX,

                closest = null;



            $.each(array, function (i, v) {

                if (goal - (base.itemWidth / 20) > array[i + 1] && goal - (base.itemWidth / 20) < v && base.moveDirection() === "left") {

                    closest = v;

                    if (base.options.scrollPerPage === true) {

                        base.currentItem = $.inArray(closest, base.positionsInArray);

                    } else {

                        base.currentItem = i;

                    }

                } else if (goal + (base.itemWidth / 20) < v && goal + (base.itemWidth / 20) > (array[i + 1] || array[i] - base.itemWidth) && base.moveDirection() === "right") {

                    if (base.options.scrollPerPage === true) {

                        closest = array[i + 1] || array[array.length - 1];

                        base.currentItem = $.inArray(closest, base.positionsInArray);

                    } else {

                        closest = array[i + 1];

                        base.currentItem = i + 1;

                    }

                }

            });

            return base.currentItem;

        },



        moveDirection : function () {

            var base = this,

                direction;

            if (base.newRelativeX < 0) {

                direction = "right";

                base.playDirection = "next";

            } else {

                direction = "left";

                base.playDirection = "prev";

            }

            return direction;

        },



        customEvents : function () {

            /*jslint unparam: true*/

            var base = this;

            base.$elem.on("owl.next", function () {

                base.next();

            });

            base.$elem.on("owl.prev", function () {

                base.prev();

            });

            base.$elem.on("owl.play", function (event, speed) {

                base.options.autoPlay = speed;

                base.play();

                base.hoverStatus = "play";

            });

            base.$elem.on("owl.stop", function () {

                base.stop();

                base.hoverStatus = "stop";

            });

            base.$elem.on("owl.goTo", function (event, item) {

                base.goTo(item);

            });

            base.$elem.on("owl.jumpTo", function (event, item) {

                base.jumpTo(item);

            });

        },



        stopOnHover : function () {

            var base = this;

            if (base.options.stopOnHover === true && base.browser.isTouch !== true && base.options.autoPlay !== false) {

                base.$elem.on("mouseover", function () {

                    base.stop();

                });

                base.$elem.on("mouseout", function () {

                    if (base.hoverStatus !== "stop") {

                        base.play();

                    }

                });

            }

        },



        lazyLoad : function () {

            var base = this,

                i,

                $item,

                itemNumber,

                $lazyImg,

                follow;



            if (base.options.lazyLoad === false) {

                return false;

            }

            for (i = 0; i < base.itemsAmount; i += 1) {

                $item = $(base.$owlItems[i]);



                if ($item.data("owl-loaded") === "loaded") {

                    continue;

                }



                itemNumber = $item.data("owl-item");

                $lazyImg = $item.find(".lazyOwl");



                if (typeof $lazyImg.data("src") !== "string") {

                    $item.data("owl-loaded", "loaded");

                    continue;

                }

                if ($item.data("owl-loaded") === undefined) {

                    $lazyImg.hide();

                    $item.addClass("loading").data("owl-loaded", "checked");

                }

                if (base.options.lazyFollow === true) {

                    follow = itemNumber >= base.currentItem;

                } else {

                    follow = true;

                }

                if (follow && itemNumber < base.currentItem + base.options.items && $lazyImg.length) {

                    base.lazyPreload($item, $lazyImg);

                }

            }

        },



        lazyPreload : function ($item, $lazyImg) {

            var base = this,

                iterations = 0,

                isBackgroundImg;



            if ($lazyImg.prop("tagName") === "DIV") {

                $lazyImg.css("background-image", "url(" + $lazyImg.data("src") + ")");

                isBackgroundImg = true;

            } else {

                $lazyImg[0].src = $lazyImg.data("src");

            }



            function showImage() {

                $item.data("owl-loaded", "loaded").removeClass("loading");

                $lazyImg.removeAttr("data-src");

                if (base.options.lazyEffect === "fade") {

                    $lazyImg.fadeIn(400);

                } else {

                    $lazyImg.show();

                }

                if (typeof base.options.afterLazyLoad === "function") {

                    base.options.afterLazyLoad.apply(this, [base.$elem]);

                }

            }



            function checkLazyImage() {

                iterations += 1;

                if (base.completeImg($lazyImg.get(0)) || isBackgroundImg === true) {

                    showImage();

                } else if (iterations <= 100) {//if image loads in less than 10 seconds 

                    window.setTimeout(checkLazyImage, 100);

                } else {

                    showImage();

                }

            }



            checkLazyImage();

        },



        autoHeight : function () {

            var base = this,

                $currentimg = $(base.$owlItems[base.currentItem]).find("img"),

                iterations;



            function addHeight() {

                var $currentItem = $(base.$owlItems[base.currentItem]).height();

                base.wrapperOuter.css("height", $currentItem + "px");

                if (!base.wrapperOuter.hasClass("autoHeight")) {

                    window.setTimeout(function () {

                        base.wrapperOuter.addClass("autoHeight");

                    }, 0);

                }

            }



            function checkImage() {

                iterations += 1;

                if (base.completeImg($currentimg.get(0))) {

                    addHeight();

                } else if (iterations <= 100) { //if image loads in less than 10 seconds 

                    window.setTimeout(checkImage, 100);

                } else {

                    base.wrapperOuter.css("height", ""); //Else remove height attribute

                }

            }



            if ($currentimg.get(0) !== undefined) {

                iterations = 0;

                checkImage();

            } else {

                addHeight();

            }

        },



        completeImg : function (img) {

            var naturalWidthType;



            if (!img.complete) {

                return false;

            }

            naturalWidthType = typeof img.naturalWidth;

            if (naturalWidthType !== "undefined" && img.naturalWidth === 0) {

                return false;

            }

            return true;

        },



        onVisibleItems : function () {

            var base = this,

                i;



            if (base.options.addClassActive === true) {

                base.$owlItems.removeClass("active");

            }

            base.visibleItems = [];

            for (i = base.currentItem; i < base.currentItem + base.options.items; i += 1) {

                base.visibleItems.push(i);



                if (base.options.addClassActive === true) {

                    $(base.$owlItems[i]).addClass("active");

                }

            }

            base.owl.visibleItems = base.visibleItems;

        },



        transitionTypes : function (className) {

            var base = this;

            //Currently available: "fade", "backSlide", "goDown", "fadeUp"

            base.outClass = "owl-" + className + "-out";

            base.inClass = "owl-" + className + "-in";

        },



        singleItemTransition : function () {

            var base = this,

                outClass = base.outClass,

                inClass = base.inClass,

                $currentItem = base.$owlItems.eq(base.currentItem),

                $prevItem = base.$owlItems.eq(base.prevItem),

                prevPos = Math.abs(base.positionsInArray[base.currentItem]) + base.positionsInArray[base.prevItem],

                origin = Math.abs(base.positionsInArray[base.currentItem]) + base.itemWidth / 2,

                animEnd = 'webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend';



            base.isTransition = true;



            base.$owlWrapper

                .addClass('owl-origin')

                .css({

                    "-webkit-transform-origin" : origin + "px",

                    "-moz-perspective-origin" : origin + "px",

                    "perspective-origin" : origin + "px"

                });

            function transStyles(prevPos) {

                return {

                    "position" : "relative",

                    "left" : prevPos + "px"

                };

            }



            $prevItem

                .css(transStyles(prevPos, 10))

                .addClass(outClass)

                .on(animEnd, function () {

                    base.endPrev = true;

                    $prevItem.off(animEnd);

                    base.clearTransStyle($prevItem, outClass);

                });



            $currentItem

                .addClass(inClass)

                .on(animEnd, function () {

                    base.endCurrent = true;

                    $currentItem.off(animEnd);

                    base.clearTransStyle($currentItem, inClass);

                });

        },



        clearTransStyle : function (item, classToRemove) {

            var base = this;

            item.css({

                "position" : "",

                "left" : ""

            }).removeClass(classToRemove);



            if (base.endPrev && base.endCurrent) {

                base.$owlWrapper.removeClass('owl-origin');

                base.endPrev = false;

                base.endCurrent = false;

                base.isTransition = false;

            }

        },



        owlStatus : function () {

            var base = this;

            base.owl = {

                "userOptions"   : base.userOptions,

                "baseElement"   : base.$elem,

                "userItems"     : base.$userItems,

                "owlItems"      : base.$owlItems,

                "currentItem"   : base.currentItem,

                "prevItem"      : base.prevItem,

                "visibleItems"  : base.visibleItems,

                "isTouch"       : base.browser.isTouch,

                "browser"       : base.browser,

                "dragDirection" : base.dragDirection

            };

        },



        clearEvents : function () {

            var base = this;

            base.$elem.off(".owl owl mousedown.disableTextSelect");

            $(document).off(".owl owl");

            $(window).off("resize", base.resizer);

        },



        unWrap : function () {

            var base = this;

            if (base.$elem.children().length !== 0) {

                base.$owlWrapper.unwrap();

                base.$userItems.unwrap().unwrap();

                if (base.owlControls) {

                    base.owlControls.remove();

                }

            }

            base.clearEvents();

            base.$elem

                .attr("style", base.$elem.data("owl-originalStyles") || "")

                .attr("class", base.$elem.data("owl-originalClasses"));

        },



        destroy : function () {

            var base = this;

            base.stop();

            window.clearInterval(base.checkVisible);

            base.unWrap();

            base.$elem.removeData();

        },



        reinit : function (newOptions) {

            var base = this,

                options = $.extend({}, base.userOptions, newOptions);

            base.unWrap();

            base.init(options, base.$elem);

        },



        addItem : function (htmlString, targetPosition) {

            var base = this,

                position;



            if (!htmlString) {return false; }



            if (base.$elem.children().length === 0) {

                base.$elem.append(htmlString);

                base.setVars();

                return false;

            }

            base.unWrap();

            if (targetPosition === undefined || targetPosition === -1) {

                position = -1;

            } else {

                position = targetPosition;

            }

            if (position >= base.$userItems.length || position === -1) {

                base.$userItems.eq(-1).after(htmlString);

            } else {

                base.$userItems.eq(position).before(htmlString);

            }



            base.setVars();

        },



        removeItem : function (targetPosition) {

            var base = this,

                position;



            if (base.$elem.children().length === 0) {

                return false;

            }

            if (targetPosition === undefined || targetPosition === -1) {

                position = -1;

            } else {

                position = targetPosition;

            }



            base.unWrap();

            base.$userItems.eq(position).remove();

            base.setVars();

        }



    };



    $.fn.owlCarousel = function (options) {

        return this.each(function () {

            if ($(this).data("owl-init") === true) {

                return false;

            }

            $(this).data("owl-init", true);

            var carousel = Object.create(Carousel);

            carousel.init(options, this);

            $.data(this, "owlCarousel", carousel);

        });

    };



    $.fn.owlCarousel.options = {



        items : 5,

        itemsCustom : false,

        itemsDesktop : [1199, 1],

        itemsDesktopSmall : [979, 1],

        itemsTablet : [768, 1],

        itemsTabletSmall : false,

        itemsMobile : [479, 1],

        singleItem : false,

        itemsScaleUp : false,



        slideSpeed : 200,

        paginationSpeed : 800,

        rewindSpeed : 1000,



        autoPlay : false,

        stopOnHover : false,



        navigation : false,

        navigationText : ["prev", "next"],

        rewindNav : true,

        scrollPerPage : false,



        pagination : true,

        paginationNumbers : false,



        responsive : true,

        responsiveRefreshRate : 200,

        responsiveBaseWidth : window,



        baseClass : "owl-carousel",

        theme : "owl-theme",



        lazyLoad : false,

        lazyFollow : true,

        lazyEffect : "fade",



        autoHeight : false,



        jsonPath : false,

        jsonSuccess : false,



        dragBeforeAnimFinish : true,

        mouseDrag : true,

        touchDrag : true,



        addClassActive : false,

        transitionStyle : false,



        beforeUpdate : false,

        afterUpdate : false,

        beforeInit : false,

        afterInit : false,

        beforeMove : false,

        afterMove : false,

        afterAction : false,

        startDragging : false,

        afterLazyLoad: false

    };

}(jQuery, window, document));